﻿2BC128 班级成绩输入输出
输入一个班级5个学生各5科成绩，输出5个学生各5科成绩及总分。
输入描述:
五行，每行输入一个学生各5科成绩（浮点数表示，范围0.0~100.0），用空格分隔。


输出描述:
五行，按照输入顺序每行输出一个学生的5科成绩及总分（小数点保留1位），用空格分隔。
示例1
输入
98.5 96.0 100 99 88
60.5 77 88.5 99 60
80 80.5 89 91 92
93 94 95.5 96 97.5
100 98 88.5 88 78.5
输出
98.5 96.0 100.0 99.0 88.0 481.5
60.5 77.0 88.5 99.0 60.0 385.0
80.0 80.5 89.0 91.0 92.0 432.5
93.0 94.0 95.5 96.0 97.5 476.0
100.0 98.0 88.5 88.0 78.5 453.0


#include<stdio.h>
int main()
{
    double arr[5][5];
    for (int i = 0; i < 5; ++i)
    {
        scanf("%lf %lf %lf %lf %lf", &arr[i][0], &arr[i][1], &arr[i][2], &arr[i][3], &arr[i][4]);
    }
    for (int i = 0; i < 5; ++i)
    {
        double sum = 0;
        for (int j = 0; j < 5; ++j)
        {
            printf("%.1f ", arr[i][j]);
            sum += arr[i][j];
        }
        printf("%.1f\n", sum);
    }
    return 0;
}

BC129 矩阵元素定位
KiKi得到了一个n行m列的矩阵，现在他想知道第x行第y列的值是多少，请你帮助他完成这个任务。 数据范围： ，矩阵中的值满足
输入描述:
第一行包含两个数n和m，表示这个矩阵包含n行m列。从2到n+1行，每行输入m个整数（范围-231~231-1），用空格分隔，共输入n*m个数，表示矩阵中的元素。接下来一行输入x和y，用空格分隔，表示KiKi想得到的元素的位置。(1≤x≤n≤10，1≤y≤m≤10)


输出描述:
一行，输出一个整数值，为KiKi想知道的值。
示例1
输入
2 3
1 2 3
4 5 6
1 2 
输出
2

int main() 
{
    int n, m;
    scanf("%d %d", &n, &m);
    int val[n + 1][m + 1];
    for (int i = 1; i <= n; i++) 
    {
        for (int j = 1; j <= m; j++) 
        {
            scanf("%d ", &val[i][j]);
        }
    }
    int x, y;
    scanf("%d %d", &x, &y);
    printf("%d", val[x][y]);
    return 0;
}

BC130 最高身高
KiKi想从n行m列的方阵队列中找到身高最高的人的位置，请你帮助他完成这个任务。
输入描述:
第一行包含两个整数n和m，表示这个方阵队列包含n行m列。从2到n+1行，每行输入m个整数（范围-231~231-1），用空格分隔，共输入n*m个数，表示方阵中的所有人的身高（保证输入身高都不相同）。(1≤x≤n≤10，1≤y≤m≤10)


输出描述:
一行，输出两个整数，用空格分隔，表示方阵中身高最高的人所在的行号和列号。
示例1
输入
2 2
175 180
176 185
输出
2 2

#include <stdio.h>

int main()
{
    int n = 0;
    int m = 0;
    int arr[10][10] = { 0 };
    scanf("%d %d", &n, &m);
    int max = 0;
    int x = 0;
    int y = 0;
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            scanf("%d", &arr[i][j]);
            if (arr[i][j] > max)
            {
                x = i + 1;
                y = j + 1;
                max = arr[i][j];
            }
        }
    }
    printf("%d %d\n", x, y);

    return 0;
}

BC131 矩阵相等判定
KiKi得到了两个n行m列的矩阵，他想知道两个矩阵是否相等，请你回答他。(当两个矩阵对应数组元素都相等时两个矩阵相等)。
输入描述:
第一行包含两个整数n和m，表示两个矩阵包含n行m列，用空格分隔。从2到n+1行，每行输入m个整数（范围-231~231-1），用空格分隔，共输入n*m个数，表示第一个矩阵中的元素。从n+2行到2n+1，每行输入m个整数（范围-231~231-1），用空格分隔，共输入n*m个数，表示第二个矩阵中的元素。1


输出描述:
一行，如果两个矩阵相等输出"Yes"并换行，否则输出"No"并换行。
示例1
输入
2 2
1 2
3 4
1 2
3 4
输出
Yes

#include <stdio.h>

int main()
{
    int n = 0;
    int m = 0;
    int arr1[10][10] = { 0 };
    int arr2[10][10] = { 0 };
    //输入
    scanf("%d %d", &n, &m);
    int i = 0;
    for (i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            scanf("%d", &arr1[i][j]);
        }
    }
    for (i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            scanf("%d", &arr2[i][j]);
            //判断
            if (arr1[i][j] != arr2[i][j])
            {
                printf("No\n");
                return 0;
            }
        }
    }
    printf("Yes\n");

    return 0;
}

BC132 矩阵计算


输入NxM矩阵，矩阵元素均为整数，计算其中大于零的元素之和。
输入描述:
第一行为N M(N: 矩阵行数；M: 矩阵列数,且M,N=10)，接下来的N行为矩阵各行。


输出描述:
一行，其中大于零的元素之和。
示例1
输入
3 3
2 3 4
-5 -9 -7
0 8 -4
输出
17


#include<stdio.h>
int main()
{
    int n, m, i, j;
    int sum = 0;
    int a[10][10] = { 0 };
    scanf("%d %d", &n, &m);
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m; j++)
        {
            scanf("%d ", &a[i][j]);
            if (a[i][j] >= 0)
                sum += a[i][j];

        }
    }
    printf("%d\n", sum);
}

BC133 回型矩阵
给你一个整数n，按要求输出n∗n的回型矩阵
输入描述:
输入一行，包含一个整数n1=n=19


输出描述:
输出n行，每行包含n个正整数.
示例1
输入
4
输出
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7

#include <stdio.h>
int main() {
    int arr[20][20], n;
    scanf("%d", &n);
    int up = 0, left = 0, right = n - 1, down = n - 1;
    int x = 1;
    while (x <= n * n)
    {
        for (int i = left; i <= right; i++)
        {
            arr[up][i] = x++;
        }
        up++;
        for (int i = up; i <= down; i++)
        {
            arr[i][right] = x++;
        }
        right--;
        for (int i = right; i >= left; i--)
        {
            arr[down][i] = x++;
        }
        down--;
        for (int i = down; i >= up; i--)
        {
            arr[i][left] = x++;
        }
        left++;
    }
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            printf("%d ", arr[i][j]);
        }
        printf("\n");
    }
    return 0;
}


BC134 蛇形矩阵

给你一个整数n，输出n∗n的蛇形矩阵。
输入描述:
输入一行，包含一个整数n


输出描述:
输出n行，每行包含n个正整数，通过空格分隔。1=n=1000
示例1
输入
4
输出
1 2 6 7
3 5 8 13
4 9 12 14
10 11 15 16

#include <stdio.h>
int array[1001][1001] = { 0 };
int main(void)
{
    int n = 0;
    scanf("%d",&n);
    int i = 1, j = 1, k = 0,pos = 1; //pos代表方向移动   1代表右上   -1代表左下
    array[i][j] = 1;
    for (k = 2; k <= n*n; k++)
    {
        if (i == 1 && j <n && pos ==1) //碰到上边界,列增加1,行不变     此后行增,列减
        {
            array[i][++j] = k;
            pos = -1;                 //方向注意
        }
        else if(j==1 && i<n && pos == -1)//碰到左边界,行增加1,列不变     此后行减,列增
        {
            array[++i][j] = k;
            pos = 1;                     //方向注意                
        }
        else if (j == n && pos==1) //碰到左边界,行增加1,列不变     此后行增,列减
        {
            array[++i][j] = k;
            pos = -1;                     //方向注意
        }
        else if (i == n && pos ==-1) //碰到右边界,列增加1,行不变    此后行减,列增
        {
            array[i][++j] = k;
            pos = 1;
        }
        else if (pos == 1)         //除去上面的边界情况,就是中间移动过程
        {
            array[--i][++j] = k;
        }
        else if(pos == -1)
        {
            array[++i][--j] = k;
        }
    }
    for (i = 1; i <= n; i++)
    {
        for (j = 1; j <= n; j++)
            printf("%d ",array[i][j]);
        printf("\n");
    }
    return 0;
}


BC135 图像相似度
给出两幅相同大小的黑白图像（用0-1矩阵）表示，求它们的相似度。若两幅图像在相同位置上的像素点颜色相同，则称它们在该位置具有相同的像素点。两幅图像的相似度定义为相同像素点数占总像素点数的百分比。
输入描述:
第一行包含两个整数m和n，表示图像的行数和列数，用单个空格隔开。1≤m≤100, 1≤n≤100。之后m行，每行n个整数0或1，表示第一幅黑白图像上各像素点的颜色，相邻两个数用单个空格隔开。之后m行，每行n个整数0或1，表示第二幅黑白图像上各像素点的颜色，相邻两个数用单个空格隔开。


输出描述:
一个实数，表示相似度(以百分比的形式给出)，精确到小数点后两位。
示例1
输入
3 3
1 0 1
0 0 1
1 1 0
1 1 0
0 0 1
0 0 1
输出
44.44

#include <stdio.h>

int main()
{
    int m = 0; //表示行数
    int n = 0; //表示列数
    int arr1[100][100] = { 0 };
    int arr2[100][100] = { 0 };
    //输入
    scanf("%d %d", &m, &n);
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++)
        {
            scanf("%d ", &arr1[i][j]);
        }
    }
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++)
        {
            scanf("%d ", &arr2[i][j]);
        }
    }
    int cnt = 0; //表示相同的个数
    //比较
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++)
        {
            if (arr1[i][j] == arr2[i][j])
            {
                cnt++;
            }
        }
    }
    //输出
    printf("%.2f\n", 100.0 * cnt / (m * n));

    return 0;
}

BC136 KiKi判断上三角矩阵
KiKi想知道一个n阶方矩是否为上三角矩阵，请帮他编程判定。上三角矩阵即主对角线以下的元素都为0的矩阵，主对角线为从矩阵的左上角至右下角的连线。
输入描述:
第一行包含一个整数n，表示一个方阵包含n行n列，用空格分隔。 (2≤n≤10)从2到n+1行，每行输入n个整数（范围-231~231-1），用空格分隔，共输入n*n个数。


输出描述:
一行，如果输入方阵是上三角矩阵输出"YES"并换行，否则输出"NO"并换行。
示例1
输入
3
1 2 3
0 4 5
0 0 6
输出
YES
示例2
输入
4
1 2 3 4
5 6 7 8
9 0 11 12 
13 0 0 16
输出
NO

int main()
{
    int arr[10][10] = { 0 };
    int i = 0;
    int j = 0;
    int n = 0;
    scanf("%d", &n);
    int sum = 0;
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n; j++)
        {
            scanf("%d", &arr[i][j]);

            while (i > j)
            {
                sum += arr[i][j];
                break;
            }
        }
    }
    if (sum == 0)
    {
        printf("YES\n");
    }
    else
    {
        printf("NO\n");
    }
    return 0;
}



BC137 序列重组矩阵

KiKi现在得到一个包含n*m个数的整数序列，现在他需要把这n*m个数按顺序规划成一个n行m列的矩阵并输出，请你帮他完成这个任务。
输入描述:
一行，输入两个整数n和m，用空格分隔，第二行包含n*m个整数（范围-231~231-1）。(1≤n≤10, 1≤m≤10)


输出描述:
输出规划后n行m列的矩阵，每个数的后面有一个空格。
示例1
输入
2 3
1 2 3 4 5 6
输出
1 2 3
4 5 6

#include <stdio.h>

int main()
{
    int n = 0;
    int m = 0;
    int arr[100] = { 0 };
    scanf("%d %d", &n, &m);
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            scanf("%d", &arr[i]);
            printf("%d ", arr[i]);
        }
        printf("\n");
    }

    return 0;
}

BC138 矩阵转置
KiKi有一个矩阵，他想知道转置后的矩阵（将矩阵的行列互换得到的新矩阵称为转置矩阵），请编程帮他解答。
输入描述:
第一行包含两个整数n和m，表示一个矩阵包含n行m列，用空格分隔。 (1≤n≤10,1≤m≤10)从2到n+1行，每行输入m个整数（范围-231~231-1），用空格分隔，共输入n*m个数，表示第一个矩阵中的元素。


输出描述:
输出m行n列，为矩阵转置后的结果。每个数后面有一个空格。
示例1
输入
2 3
1 2 3
4 5 6
输出
1 4 
2 5 
3 6 

#include <stdio.h>

int main()
{
    int n = 0;
    int m = 0;
    int arr[10][10] = { 0 };
    scanf("%d %d", &n, &m);
    int i = 0;
    int j = 0;
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m; j++)
        {
            scanf("%d", &arr[i][j]);
        }
    }
    for (i = 0; i < m; i++)
    {
        for (j = 0; j < n; j++)
        {
            printf("%d ", arr[j][i]);
        }
        printf("\n");
    }

    return 0;
}

BC139 矩阵交换
KiKi有一个矩阵，他想知道经过k次行变换或列变换后得到的矩阵。请编程帮他解答。
输入描述:
第一行包含两个整数n和m，表示一个矩阵包含n行m列，用空格分隔。 (1≤n≤10,1≤m≤10)从2到n+1行，每行输入m个整数（范围-231~231-1），用空格分隔，共输入n*m个数，表示第一个矩阵中的元素。接下来一行输入k，表示要执行k次操作（1≤k≤5）。接下来有k行，每行包括一个字符t和两个数a和b，中间用空格格分隔，t代表需要执行的操作，当t为字符'r'时代表进行行变换，当t为字符'c'时代表进行列变换，a和b为需要互换的行或列（1≤a≤b≤n≤10，1≤a≤b≤m≤10）。 提示：当t为别的字符时不需要处理


输出描述:
输出n行m列，为矩阵交换后的结果。每个数后面有一个空格。
示例1
输入
2 2
1 2
3 4
1
r 1 2
输出
3 4 
1 2 
示例2
输入
2 2
1 3
6 8
2
c 1 2
t 1 2
输出
3 1 
8 6 
说明
当t为别的字符时不需要处理，所以只交换了原矩阵的第1列和第2列。 



#include<stdio.h>
int main(void) {
    int m = 0, n = 0;
    scanf("%d %d", &m, &n);
    int s[m][n];
    //int ss[n][m];//一开始想用两个矩阵，发现后面如果多组输入，更改的一直是初始矩阵，且代码繁杂,采用一个矩阵的方式
    for (int i = 0; i < m; i++) {//初始化
        for (int j = 0; j < n; j++) {
            scanf("%d ", &s[i][j]);
        }
    }
    int t = 0;//变换次数
    char flag = 'r';//判断行还是列变
    int c1 = 0, c2 = 0;//变换的行（列）号
    int temp = 0;
    scanf("%d ", &t);
    while (t) {
        scanf(" %c %d %d", &flag, &c1, &c2);
        c1--; c2--;//给的是行号，--之后才是数组下标值
        if (flag == 'r') {
            for (int j = 0; j < n; j++) {
                temp = s[c2][j];//交换c1和c2行
                s[c2][j] = s[c1][j];
                s[c1][j] = temp;
            }
        }

        if (flag == 'c') {
            for (int i = 0; i < m; i++) {//交换C1和C2列
                temp = s[i][c2];
                s[i][c2] = s[i][c1];
                s[i][c1] = temp;
            }
        }
        t--;
    }
    //打印最终数组
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++)
            printf("%d ", s[i][j]);
        printf("\n");
    }

    return 0;
}


BC140 杨辉三角
KiKi知道什么叫杨辉三角之后对杨辉三角产生了浓厚的兴趣，他想知道杨辉三角的前n行，请编程帮他解答。杨辉三角，本质上是二项式(a+b)的n次方展开后各项的系数排成的三角形。其性质包括：每行的端点数为1， 一个数也为1；每个数等于它左上方和上方的两数之和。
输入描述:
第一行包含一个整数数n。 (1≤n≤30)


输出描述:
包含n行，为杨辉三角的前n行，每个数输出域宽为5。
示例1
输入
6
输出
    1
    1    1
    1    2    1
    1    3    3    1
    1    4    6    4    1
    1    5   10   10    5    1

#include <stdio.h>

    int main()
{
    int n = 0;
    int arr[30][30] = { 0 };
    scanf("%d", &n);
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j <= i; j++)
        {
            if (0 == j || i == j)
            {
                arr[i][j] = 1;
            }
            else
            {
                arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
            }
            printf("%5d", arr[i][j]);
        }
        printf("\n");
    }

    return 0;
}

BC141 井字棋
KiKi和BoBo玩 “井”字棋。也就是在九宫格中，只要任意行、列，或者任意对角线上面出现三个连续相同的棋子，就能获胜。请根据棋盘状态，判断当前输赢。
输入描述:
三行三列的字符元素，代表棋盘状态，字符元素用空格分开，代表当前棋盘，其中元素为K代表KiKi玩家的棋子，为O表示没有棋子，为B代表BoBo玩家的棋子。


输出描述:
如果KiKi获胜，输出“KiKi wins!”；如果BoBo获胜，输出“BoBo wins!”；如果没有获胜，输出“No winner!”。
示例1
输入
K O B
O K B
B O K
输出
KiKi wins!

#include <stdio.h>

int main()
{
    char board[3][3] = { 0 };
    char flag = 0;
    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            scanf(" %c", &board[i][j]);
        }
    }
    //判断输赢
    for (int i = 0; i < 3; i++)
    {
        //行
        if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][2] != 'O')
        {
            flag = board[i][2];
            break;
        }
        //列
        if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[2][i] != 'O')
        {
            flag = board[2][i];
            break;
        }
    }
    //对角线
    if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[2][2] != 'O')
    {
        flag = board[2][2];
    }
    if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[2][0] != 'O')
    {
        flag = board[2][0];
    }

    if ('K' == flag)
    {
        printf("KiKi wins!\n");
    }
    else if ('B' == flag)
    {
        printf("BoBo wins!\n");
    }
    else
    {
        printf("No winner!\n");
    }

    return 0;
}



BC142 扫雷
小sun上课的时候非常喜欢玩扫雷。他现小sun有一个初始的雷矩阵，他希望你帮他生成一个扫雷矩阵。 扫雷矩阵的每一行每一列都是一个数字，每个数字的含义是与当前位置相邻的8个方向中，有多少个雷（在下图中，雷用*表示）；如果当前位置就是雷的话，仍输出一个*。 比如初始的雷矩阵如下： .... ..** *.*. .*.* 对应的数字矩阵为： 0122 13** *4*4 2*3*
输入描述:
第一行两个整数n,m，代表矩阵有n行m列接下来共n行，每行m个字符


输出描述:
输出共n行m列，为扫雷矩阵。
示例1
输入
4 4
....
..**
*.*.
.*.*
输出
0122
13**
*4*4
2*3*
示例2
输入
3 4
....
*..*
.*.*
输出
1111
*23*
2*3*

备注:
数据范围：



#include <stdlib.h>
#include <stdio.h>

int main()
{
	int m = 0;
	int n = 0;
	scanf("%d %d", &m, &n);
	char* a = (char*)calloc((m + 2) * (n + 2), sizeof(char));//我觉calloc更好用 因为自带初始化
	int i = 0;
	int j = 0;
	for (i = 1; i < m + 1; i++)
	{
		for (j = 1; j < n + 1; j++)
		{
			scanf(" %c ", a + i * (n + 2) + j);//注意这里的读取一定要加上前后两个空格 来忽略对换行的读取 
            //我就是在这里调了半天
		}
	}
	int si = 0;
	int sj = 0;
	int num = 0;
	for (i = 1; i < m + 1; i++)
	{
		for (j = 1; j < n + 1; j++)
		{
			if (*(a + i * (n + 2) + j) == '*')//如果为 * 则直接输出 *
				printf("*");
			else//如果不为 * 说明需要进行九宫格判断
			{
				num = 0;
				sj = j - 1;
				for (si = i - 1; si <= i + 1; si++)
				{
					for (sj = j - 1; sj <= j + 1; sj++)
					{
						if (*(a + si * (n + 2) + sj) == '*')
							num++;
					}
				}
				printf("%c", '0' + num);//其实这里是多余的 可以直接将 num 作整数输出
			}
		}
		printf("\n");
	}
	return 0;
}

BC143[NOIP2018]标题统计
凯刚写了一篇美妙的作文，请问这篇作文的标题中有多少个字符？ 注意：标题中可能包含大、小写英文字母、数字字符、空格和换行符。统计标题字 符数时，空格和换行符不计算在内。
输入描述:
输入文件只有一行， 一个字符串s。


输出描述:
输出文件只有一行，包含一个整数，即作文标题的字符数（不含空格和换行符）。
示例1
输入
234
输出
3
说明
标题中共有 3 个字符，这 3 个字符都是数字字符。
示例2
输入
Ca 45
输出
4
说明
标题中共有 5 个字符，包括 1 个大写英文字母，1 个小写英文字母和 2 个数字字符，
还有 1 个空格。由于空格不计入结果中，故标题的有效字符数为 4 个。

备注:
规定s表示字符串s的长度（即字符串中的字符串中的字符和空格数）。对于40%的数据，1≤s≤5，保证输入为数字符及行末换符。对于80%的数据，1≤s≤5，输入只可能包含大、小写英文字母大、小写英文字母、数字符及行末换符。对于100%的数据，1≤s≤5，输入可能包含大，输入可能包含大、小写英文字母写英文字母、数字符、空格和行末换符。

#include<stdio.h>
#include<string.h>
int main() {
    int sum = 0, i;
    char s[100];
    gets(s);//gets才能吸收空格
    for (i = 0; i < strlen(s); i++) {
        if (s[i] >= '0' && s[i] <= '9') {
            sum++;
        }
        if (s[i] >= 'a' && s[i] <= 'z') {
            sum++;
        }
        if (s[i] >= 'A' && s[i] <= 'Z') {
            sum++;
        }
    }
    printf("%d", sum);
}


BC144 登录验证
有个软件系统登录的用户名和密码为（用户名：admin，密码：admin），用户输入用户名和密码，判断是否登录成功。
输入描述:
多组测试数据，每行有两个用空格分开的字符串，第一个为用户名，第二个为密码。


输出描述:
针对每组输入测试数据，输出为一行，一个字符串（“Login Success!”或“Login Fail!”）。
示例1
输入
admin admin
输出
Login Success!
示例2
输入
admin abc
输出
Login Fail!

BC144 登录验证
#include<stdio.h>
int main()
{
    char a[100];
    char b[100];
    int c = 0, d = 0;
    scanf("%s", a);
    scanf("%s", b);
    if (a[0] == 'a' && a[1] == 'd' && a[2] == 'm' && a[3] == 'i' && a[4] == 'n')
    {
        c = 1;
    }
    if (b[0] == 'a' && b[1] == 'd' && b[2] == 'm' && b[3] == 'i' && b[4] == 'n')
    {
        d = 1;
    }
    if (c == 1 && d == 1)printf("Login Success!\n");
    else printf("Login Fail!\n");
}
//时间复杂度为o(0)
BC145[NOIP2008]笨小猴
笨小猴的词汇量很小，所以每次做英语选择题的时候都很头疼。但是他找到了一种方法，经试验证明，用这种方法去选择选项的时候选对的几率非常大！ 这种方法的具体描述如下：假设maxn是单词中出现次数最多的字母的出现次数，minn是单词中出现次数最少的字母的出现次数，如果maxn-minn是一个质数，那么笨小猴就认为这是个Lucky Word，这样的单词很可能就是正确的答案。
输入描述:
只有一行，是一个单词，其中只可能出现小写字母，并且长度小于100。


输出描述:
共两行，第一行是一个字符串，假设输入的的单词是Lucky Word，那么输出“Lucky Word”，否则输出“No Answer”；第二行是一个整数，如果输入单词是Lucky Word，输出maxn-minn的值，否则输出0。
示例1
输入
error
输出
Lucky Word
2
说明
单词error中出现最多的字母r出现了3次，出现次数最少的字母出现了1次，3-1=2，2是质数。  
示例2
输入
Olympic
输出
No Answer
0
说明
单词olympic中出现每个字母都只出现一次，即出现次数最多的字母出现了1次，出现次数最少的字母出现了1次，1-1=0，0不是质数。  

#include<stdio.h>
#include<string.h>
int main() {
    int maxn = 0, minn = 9, sum = 0;
    int i, j, m, flag = 1; //m=maxn-minn
    char ch[10] = { 0 };
    scanf("%s", &ch);
    for (i = 0; i < strlen(ch); i++) {
        sum = 0;
        for (j = 0; j < strlen(ch); j++) {
            if (ch[i] == ch[j])
                sum++;
        }
        if (sum > maxn) {
            maxn = sum;
        }
        if (sum < minn) {
            minn = sum;
        }
    }
    m = maxn - minn;
    //下面判断m是不是素数
    for (i = 2; i < m; i++)
    {
        if (m % i == 0)  //除了1和本身
            flag = 0;
    }
    if (flag == 1 && m != 1 && m != 0)
    {
        printf("Lucky Word\n%d", m);
    }
    else
    {
        m = 0;
        printf("No Answer\n%d", m);
    }

}

BC146 添加逗号
对于一个较大的整数 N(1 比如 980364535，我们常常需要一位一位数这个数字是几位数，但是如果在这 个数字每三位加一个逗号，它会变得更加易于朗读。 因此，这个数字加上逗号成如下的模样：980,364,535请写一个程序帮她完成这件事情
输入描述:
一行一个整数 N


输出描述:
一行一个字符串表示添加完逗号的结果
示例1
输入
980364535
输出
980,364,535

备注:
1≤n≤2,000,000,000
#include<string.h>
int main() {
    char s[20] = { 0 };
    scanf("%s", &s);
    int val = strlen(s);  //获取字符长度
    for (int i = 1; i <= val; i++) {  //依次输出字符
        printf("%c", s[i - 1]);
        //每输出三位数加一个‘，’且输出数不为最后一个数
        if ((val - i) % 3 == 0 && i != val) printf(",");
    }
    return 0;
}

BC147 竞选社长
假设你们社团要竞选社长，有两名候选人分别是A和B，社团每名同学必须并且只能投一票，最终得票多的人为社长.
输入描述:
一行，字符序列，包含A或B，输入以字符0结束。


输出描述:
一行，一个字符，A或B或E，输出A表示A得票数多，输出B表示B得票数多，输出E表示二人得票数相等。
示例1
输入
ABBABBAAB0
输出
B

#include<stdio.h>
int main(void)
{
    char s;
    int coutA = 0, coutB = 0;
    while ((s = getchar()) != '0')//关键是要看输入符号结束的设定
    {
        if (s == 'A')
            coutA++;
        else
            coutB++;
    }
    if (coutA > coutB)
        printf("A");
    else if (coutA < coutB)
        printf("B");
    else
        printf("E");
    return 0;
}

BC148 字符串操作
给定长度为n的只有小写字母的字符串s，进行m次操作，每次将[l,r]范围内所有c1字符改成c2，输出操作完的字符串
输入描述:
第一行两个数n,m第二行一个字符串s之后m行，每行两个数l r两个字符c1 c2


输出描述:
输出一行一个字符串
示例1
输入
5 3
wxhak
3 3 h x
1 5 x a
1 3 w g
输出
gaaak
说明
第一次修改后为wxxak
第二次修改后为waaak
第三次修改后为gaaak

备注:
对于100%的数据，有1=n , m=100

int main() {
    int n, m, l, r;
    char s[1000] = {0}, c1, c2;
    scanf("%d %d\n%s", &n, &m, &s);
    for (int i = 0; i < m; i++) {  //根据m值进行循环
        scanf("%d %d %c %c\n", &l, &r, &c1, &c2);
        for (int j = l; j <= r; j++) {  //根据每次输入的l,r值进行循环
            if (s[j - 1] == c1) s[j - 1] = c2;  //根据c1,c2的值来进行修改
        }
    }
    printf("%s", s);  //输出最终结果
    return 0;
}

BC149 简写单词
规定一种对于复合词的简写方式为只保留每个组成单词的首字母，并将首字母大写后再连接在一起 比如 “College English Test”可以简写成“CET”，“Computer Science”可以简写为“CS”，“I am Bob”简写为“IAB” 输入一个长复合词（组成单词数 ,每个单词长度），请你输出它的简写
输入描述:
输入一个复合词


输出描述:
输出一行，表示复合词的简写
示例1
输入
College English Test
输出
CET

#include<stdio.h>
int main() {
    char s[100] = { 0 };
    while (scanf("%s", &s) != EOF) {
        if (s[0] >= 65 && s[0] <= 90) printf("%c", s[0]);
        else printf("%c", s[0] - 32);
    }
    return 0;
}

BC150 小乐乐计算函数
小乐乐学会了自定义函数，BoBo老师给他出了个问题，根据以下公式计算m的值。 其中 max3函数为计算三个数的最大值，如： max3(1, 2, 3) 返回结果为3。
输入描述:
一行，输入三个整数，用空格隔开，分别表示a, b, c。


输出描述:
一行，一个浮点数，小数点保留2位，为计算后m的值。
示例1
输入
1 2 3
输出
0.30

#include<stdio.h>
int max3(int a,int b,int c)
{
    return a>b? a>c?a:c : b>c?b:c;//逻辑表达式
}
int main()
{
    int a = 0;
    int b = 0;
    int c = 0;
    float m = 0;
    scanf("%d %d %d",&a,&b,&c);
    m = 1.0*max3(a+b,b,c)/( (max3(a,b+c,c) + max3(a,b,b+c) );
    printf("%.2f",m);
    return 0;
}